翻訳と辞書
Words near each other
・ Non-lethal weapon
・ Non-lexical vocables in music
・ Non-Life Master Swiss Teams
・ Non-lifting sign
・ Non-line-of-sight propagation
・ Non-linear coherent states
・ Non-linear editing system
・ Non-linear effects
・ Non-linear iterative partial least squares
・ Non-linear least squares
・ Non-linear multi-dimensional signal processing
・ Non-Linear Preferential Attachment
・ Non-linear sigma model
・ Non-Linear Systems
・ Non-local means
Non-local variable
・ Non-lock concurrency control
・ Non-logical symbol
・ Non-Manufacturing Business Activity Index
・ Non-Manufacturing ISM Report on Business
・ Non-maskable interrupt
・ Non-material culture
・ Non-measurable set
・ Non-Mendelian inheritance
・ Non-metallic inclusions
・ Non-methane volatile organic compound
・ Non-metropolitan county
・ Non-metropolitan district
・ Non-mevalonate pathway
・ Non-military armored vehicle


Dictionary Lists
翻訳と辞書 辞書検索 [ 開発暫定版 ]
スポンサード リンク

Non-local variable : ウィキペディア英語版
Non-local variable
In programming language theory, a non-local variable is a variable that is not defined in the local scope. While the term can refer to global variables, it is primarily used in the context of nested and anonymous functions where some variables can be neither in the local nor the global scope.
In Lua they are called the ''upvalues'' of the function.〔''( Programming in Lua (first edition) ),'' "(27.3.3 – Upvalues )"〕
== Examples ==
=== Nested functions ===
In the Python 3 example that follows there is a nested function inner defined in the scope of another function outer. The variable x is local to outer, but non-local to inner (nor is it global):

def outer():
x = 1
def inner():
nonlocal x
x += 1
print(x)
return inner

In Javascript, the locality of a variable is determined by the closest var statement for this variable. In the following example, x is local to outer as it contains a var x statement, while inner doesn't. Therefore, x is non-local to inner:

function outer()

=== Anonymous functions ===
In the Haskell example that follows the variable c is non-local in the anonymous function \x -> x + c:

outer = let c = 1 in map (\x -> x + c) (2, 3, 4, 5 )

== Implementation issues ==

Non-local variables are the primary reason it is difficult to support nested, anonymous, higher-order and thereby first-class functions in a programming language.
If the nested function or functions are (mutually) recursive, it becomes hard for the compiler to know exactly where on the call stack the non-local variable was allocated, as the frame pointer only points to the local variable of the nested function itself and there can be an arbitrary number of activation records on the stack in between. This is generally solved using access links or display registers.
If the nested function is passed as an argument to a higher-order function a closure needs to be built in order to locate the non-local variables. If the nested function is returned as a result from its outer function (or stored in a variable) the non-local variables will no longer be available on the stack. They need to be heap allocated instead, and their lifetime extend beyond the lifetime of the outer function that declared and allocated them. This generally requires garbage-collection.

抄文引用元・出典: フリー百科事典『 ウィキペディア(Wikipedia)
ウィキペディアで「Non-local variable」の詳細全文を読む



スポンサード リンク
翻訳と辞書 : 翻訳のためのインターネットリソース

Copyright(C) kotoba.ne.jp 1997-2016. All Rights Reserved.